<?php
namespace framework\ext;

//多语言支持类
class Lang
{
    public static $config;
    private static $langArray;
    public static function init($config=array())
    {
        self::$config['LANG_DEFAULT']=	isset($config['LANG_DEFAULT'])?$config['LANG_DEFAULT']:'zh';//默认语言
        self::$config['LANG_PACK_PATH']=isset($config['LANG_PACK_PATH'])?$config['LANG_PACK_PATH']:'./lang/';//语言包目录
        self::$config['LANG_PACK_SUFFIX']=isset($config['LANG_PACK_SUFFIX'])?$config['LANG_PACK_SUFFIX']:'.lang.php';//语言包后缀
        self::$config['LANG_PACK_COMMON']=isset($config['LANG_PACK_COMMON'])?$config['LANG_PACK_COMMON']:'common';//公用语言包，默认会自动加载
        //语言包目录不以“/”结尾，加上“/”
        if (substr(self::$config['LANG_PACK_PATH'], -1) != "/") {
            self::$config['LANG_PACK_PATH'] .= "/";
        }
        //定义当前语言
        if (!defined(__LANG__)) {
            define('__LANG__', self::getLang(self::$config['LANG_DEFAULT']));
        }//定义当前选择的语言
        self::$config['LANG_PACK_PATH']=self::$config['LANG_PACK_PATH'].__LANG__.'/';	//设置当前语言的语言包目录
    }
    
    //获取不同语言的值
    public static function get($key, $pack='')
    {
        $lang_array=self::getPack($pack);
        return isset($lang_array[$key])?$lang_array[$key]:$key;
    }

    //获取语言包数组
    public static function getPack($pack='')
    {
        $common_pack=self::$config['LANG_PACK_COMMON'];//公用语言包
        $pack=empty($pack)?$common_pack:$pack;//不指定语言包，自动调用公共语言包
        if (!isset(self::$langArray[$pack])) {
            if ($pack==$common_pack) {
                self::$langArray[$pack]=self::_loadLangPack($common_pack);
            } else {//加载公共语言包和指定的语言包
                  self::$langArray[$pack]=@array_merge(self::_loadLangPack($common_pack), self::_loadLangPack($pack));//两个数组合并
            }
        }
        return self::$langArray[$pack];
    }

    //获取当前语言
    private static function getLang($default='zh')
    {
        if (isset($_GET['lang'])) {// 获取url中设置了语言变量
            $lang = $_GET['lang'];
        } elseif (isset($_COOKIE['cp_language'])) {//获取用户上次选择的语言
            $lang=$_COOKIE['cp_language'];
        } elseif (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {//检测浏览器语言
            preg_match('/^([a-z\-]+)/i', $_SERVER['HTTP_ACCEPT_LANGUAGE'], $matches);
            $lang = $matches[1];
        } else {
            $lang=$default;//默认语言
        }
            
        //如果获取到语言为空，则设置为默认语言
        if (empty($lang)) {
            $lang=$default;//默认语言
        }
            
        $lang=strtolower($lang);//大写转换成小写
            
        //如果当前语言目录不存在，如en-us,则使用en作为当前语言目录
        if (!is_dir(self::$config['LANG_PACK_PATH'].$lang.'/')) {
            $lang_2=explode('-', $lang);//当前语言分割，获取语言大类，如en-us，获取en
            $lang=$lang_2[0];
            if (!is_dir(self::$config['LANG_PACK_PATH'].$lang.'/')) {
                $lang=$default;
            }//默认语言
        }
        setcookie('cp_language', $lang, time()+3600*24*365, '/');
        return $lang;
    }
    
    //加载语言包
    private static function _loadLangPack($pack)
    {
        $lang_array=array();
        $lang_file=self::$config['LANG_PACK_PATH'].$pack.self::$config['LANG_PACK_SUFFIX'];
        if (file_exists($lang_file)) {
            $lang_array=require_once($lang_file);
            if (!is_array($lang_array)) {//数据不为数组的时候，为了下面的array_merge，赋值为空数组，
                $lang_array=array();
            }
        }
        return $lang_array;
    }
}
